package com.zjun.core;

import com.alibaba.ttl.TransmittableThreadLocal;

import java.util.Optional;

/**
 * 用户上下文
 */
public final class UserContext {
    private static final ThreadLocal<UserInfoDTO> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();

    /**
     * 设置用户上下文
     * @param user
     */
    public static void setUser(UserInfoDTO user){ USER_THREAD_LOCAL.set(user);}

    /**
     * 获取上下文中用户Id
     * @return
     */
    public static String getUserId(){
        UserInfoDTO user = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(user).map(UserInfoDTO::getUserId).orElse(null);
    }

    /**
     * 获取上下文用户名称
     * @return
     */
    public static String getUserName(){
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getUsername).orElse(null);
    }

    /**
     * 获取上下文用户真实姓名
     * @return
     */
    public static String getRealName(){
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getRealName).orElse(null);
    }

    /**
     * 获取上下文用户Token
     * @return
     */
    public static String getToken(){
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserInfoDTO::getToekn).orElse(null);
    }

    /**
     * 清理用户上下文
     */
    public static void removeUser(){USER_THREAD_LOCAL.remove();}
}
